package com.cy.pj.sys.service.impl;

import com.cy.pj.common.pojo.PageObject;
import com.cy.pj.sys.dao.SysRoleDao;
import com.cy.pj.sys.dao.SysRoleMenuDao;
//import com.cy.pj.common.pojo.CheckBox;
import com.cy.pj.common.pojo.CheckBox;
import com.cy.pj.sys.pojo.SysRole;
import com.cy.pj.sys.pojo.SysRoleMenu;
import com.cy.pj.sys.service.SysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 张琪
 * @date 2020/11/16
 * @describe
 */
@Service
public class SysRoleServiceImpl implements SysRoleService {

    @Autowired
    private SysRoleDao sysRoleDao;

    @Autowired
    private SysRoleMenuDao sysRoleMenuDao;

    @Override
    public PageObject findPageObjects1(String name, Integer pageCurrent) {
//        1. 数据校验
        if(pageCurrent < 1 || pageCurrent == null){
            throw new IllegalArgumentException("当前传输的页码值无效");
        }
//        2. 查询总记录数并进行校验
        int rows = sysRoleDao.getRowCount(name);
        if(rows == 0){
            throw new IllegalArgumentException("找不到对应的记录");
        }
//        3. 查询当前页面记录
        int pageSize = 15;
        int startIndex = (pageCurrent - 1) * pageSize;

        List<SysRole> records = sysRoleDao.findPageObjects1(name, startIndex, pageSize);

        PageObject pageObject = new PageObject(rows, records, pageSize, pageCurrent);
//        4. 获取总页数, 并进行封装
        Integer pageCount = rows / pageSize;
        if(rows % pageSize != 0 || pageCount == 0){
            pageCount++;
        }
        pageObject.setPageCount(pageCount);
//        5. 返回数据
        return pageObject;
    }

    /*此注解描述的方法为事务的切入点方法*/
    @Transactional      //该注解修饰时,  底层帮助我们在该方法在执行前开启事务, 在之后会提交或回滚事务
    @Override
    public int saveObject(SysRole sysRole, Integer[] menuIds) {
//        1. 参数校验
//        2. 保存角色自身信息
        int rows = sysRoleDao.insertObject(sysRole);    //mapper中获取到了自增后的id值
        System.err.println(sysRole);
//        3. 保存角色和菜单关系
        int row = sysRoleMenuDao.insertObjects(sysRole.getId(), menuIds);
        System.err.println(row);

        return rows;
    }

    @Override
    public SysRoleMenu findById(Integer id) {
//        1. 参数校验
//        2. 查询自身信息
        System.out.println(id);
        SysRoleMenu sysRoleMenu = sysRoleDao.findById(id);
//        3. 查询对应的管理信息, 并进行封装
//        List<Integer> list = sysRoleMenuDao.findMenuIdsById(id);
//        sysRoleMenu.setMenuIds(list);
//        4.
        return sysRoleMenu;
    }

    @Transactional
    @Override
    public int updateObject(SysRole sysRole, Integer[] menuIds) {
//        1. 参数校验
//        2. 保存角色自身信息
        int rows = sysRoleDao.updateObject(sysRole);    //mapper中获取到了自增后的id值
//        3. 保存角色和菜单关系
        sysRoleMenuDao.deleteObjectsByMenuId(sysRole.getId());
        int row = sysRoleMenuDao.insertObjects(sysRole.getId(), menuIds);

        return rows;
    }


    @Override
    public List<CheckBox> findObjects() {
        return sysRoleDao.findObjects();
    }

    @Override
    public int doDeleteObject(Integer id) {
        int rows = sysRoleDao.deleteObjectById(id);
        return rows;
    }
}
